/*
 * To change this template, choose Tools | Templates and open the template in
 * the editor.
 */
package util;

import com.toedter.calendar.JDateChooser;
import dao.ConfigSistemaDao;
import java.awt.Component;
import java.awt.Container;
import java.awt.Desktop;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.net.URISyntaxException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.text.Normalizer;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import javax.swing.*;
import modelo.ConfigSistema;
import telas.clientes.PesqClientes;
import telas.funcionarios.PesqFuncionario;
import telas.usuarios.PesqUsuario;

/**
 *
 * @author gilberto.costa
 */
public class Utilitario {

    public static String removeAcentos(String str) {
        CharSequence cs = new StringBuilder(str == null ? "" : str);
        return Normalizer.normalize(cs, Normalizer.Form.NFKD).replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
    }

    public static String removeCaracterdeUmaString(String str) {
        String[] caracteresEspeciais = {"\\.", ",", "-", ":", "\\(", "\\)", "ª", "\\|", "\\\\", "°", "//", "/"};

        for (int i = 0; i < caracteresEspeciais.length; i++) {
            str = str.replaceAll(caracteresEspeciais[i], "");
        }
        //         * Troca os espaços no início por "" *
        str = str.replaceAll("^\\s+", "");
        //         * Troca os espaços no início por "" *
        str = str.replaceAll("\\s+$", "");
        //         * Troca os espaços duplicados, tabulações e etc por " " *
        str = str.replaceAll("\\s+", " ");
        return str;
    }

    public static String removeVirgulaDosNumeros(String str) {
        String[] caracteresEspeciais = {"\\."};
        for (int i = 0; i < caracteresEspeciais.length; i++) {
            str = str.replaceAll(caracteresEspeciais[i], "");
        }
        return str;
    }

    public static boolean IsNumber(String Numero) {
        try {
            Long.parseLong(Numero);
            return true;
        } catch (NumberFormatException e) {
            return false;
        }
    }

    public static void limparTodosCampos(Container container) {
        Component components[] = container.getComponents();
        for (Component component : components) {
            if (component instanceof JFormattedTextField) {
                JFormattedTextField field = (JFormattedTextField) component;
                field.setValue(null);
            } else if (component instanceof JTextField) {
                JTextField field = (JTextField) component;
                field.setText(null);
            } else if (component instanceof JTextArea) {
                JTextArea field = (JTextArea) component;
                field.setText(null);
            } else if (component instanceof JDateChooser) {
                JDateChooser field = (JDateChooser) component;
                field.setDate(null);
            } else if (component instanceof JCheckBox) {
                JCheckBox field = (JCheckBox) component;
                field.setSelected(false);
            } else if (component instanceof JComboBox) {
                JComboBox field = (JComboBox) component;
                field.setSelectedIndex(0);
            } else if (component instanceof Container) {
                limparTodosCampos((Container) component);
            }
        }
    }

    public static void liberaTodosCampos(Container container) {
        Component components[] = container.getComponents();
        for (Component component : components) {
            if (component instanceof JFormattedTextField) {
                JFormattedTextField field = (JFormattedTextField) component;
                field.setEditable(true);
            } else if (component instanceof JTextField) {
                JTextField field = (JTextField) component;
                field.setEditable(true);
            } else if (component instanceof JTextArea) {
                JTextArea field = (JTextArea) component;
                field.setEditable(true);
            } else if (component instanceof JDateChooser) {
                JDateChooser field = (JDateChooser) component;
                field.setEnabled(true);
            } else if (component instanceof JCheckBox) {
                JCheckBox field = (JCheckBox) component;
                field.setEnabled(true);
            } else if (component instanceof JComboBox) {
                JComboBox field = (JComboBox) component;
                field.setEnabled(true);
            } else if (component instanceof Container) {
                liberaTodosCampos((Container) component);
            }
        }
    }

    public static void bloqueiaTodosCampos(Container container) {
        Component components[] = container.getComponents();
        for (Component component : components) {
            if (component instanceof JFormattedTextField) {
                JFormattedTextField field = (JFormattedTextField) component;
                field.setEditable(false);
            } else if (component instanceof JTextField) {
                JTextField field = (JTextField) component;
                field.setEditable(false);
            } else if (component instanceof JTextArea) {
                JTextArea field = (JTextArea) component;
                field.setEditable(false);
            } else if (component instanceof JDateChooser) {
                JDateChooser field = (JDateChooser) component;
                field.setEnabled(false);
            } else if (component instanceof JCheckBox) {
                JCheckBox field = (JCheckBox) component;
                field.setEnabled(false);
            } else if (component instanceof JComboBox) {
                JComboBox field = (JComboBox) component;
                field.setEnabled(false);
            } else if (component instanceof Container) {
                bloqueiaTodosCampos((Container) component);
            }
        }
    }

    public static void IrParaSite(String site) {
        if (!site.equalsIgnoreCase("") && site.contains(".com.br")) {
            int opcao;
            Object[] botoes = {"Sim", "Cancelar"};
            opcao = JOptionPane.showOptionDialog(null, "Deseja ir para (http://" + site + ")?",
                    "Confirmação!", JOptionPane.YES_NO_OPTION,
                    JOptionPane.QUESTION_MESSAGE, null, botoes, botoes[0]);
            if (opcao == JOptionPane.YES_OPTION) {
                Desktop desk = java.awt.Desktop.getDesktop();
                try {
                    desk.browse(new java.net.URI("http://" + site));
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (URISyntaxException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public static Connection conetaBanco() {
        Connection con = null;
        //retorna 
        ConfigSistema conf = ConfigSistemaDao.retornaConfigSistemaPorId(1L);
        String usu = null;
        String senh = null;
        String urlbanco = null;
        if (conf != null) {
            usu = conf.getUsuarioBanco();
            senh = conf.getSenhaBanco();
            urlbanco = conf.getUrlbanco();
        }
        try {
            String url = "jdbc:postgresql://" + urlbanco;
            String usuario = usu;
            String senha = senh;
            Class.forName("org.postgresql.Driver");
            con = DriverManager.getConnection(url, usuario, senha);
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Erro: " + e);
        }
        return con;
    }

    public static String criptografaSenha(String senha) throws NoSuchAlgorithmException {
        //Essa classe pega um valor de tamanho arbitrario e transforma em um valor de tamanho fixo
        MessageDigest md = MessageDigest.getInstance("SHA");
        //Atualiza o valor com os bytes especificados
        md.update(senha.getBytes());
        //Conclui o cálculo de hash realizando operações finais, tais como  preenchimento.
        BigInteger hash = new BigInteger(1, md.digest());
        //Retorna a representação String decimal deste BigInteger, com tamanho igual a 16.
        String retornaSenha = hash.toString(16);
        return retornaSenha;
    }

    public static DecimalFormat decimalFormat() {
        DecimalFormatSymbols DOLAR = new DecimalFormatSymbols(Locale.US);
        DecimalFormat DINHEIRO_DOLAR = new DecimalFormat("¤ ###,###,##0.00", DOLAR);
        DecimalFormatSymbols EURO = new DecimalFormatSymbols(Locale.GERMANY);
        DecimalFormat DINHEIRO_EURO = new DecimalFormat("¤ ###,###,##0.00", EURO);
        Locale BRAZIL = new Locale("pt", "BR");
        DecimalFormatSymbols REAL = new DecimalFormatSymbols(BRAZIL);
        DecimalFormat DINHEIRO_REAL = new DecimalFormat("###,###,##0.00", REAL);
        return DINHEIRO_REAL;
    }

    public static void eventosteclado(JLabel d, final String tela, final Container container) {
        d.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0), "F1");
        d.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_F2, 0), "F2");
        d.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_F3, 0), "F3");
        d.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_F4, 0), "F4");
        d.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_F5, 0), "F5");
        d.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_F6, 0), "F6");
        d.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_F7, 0), "F7");
        d.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_F8, 0), "F8");
        d.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_F9, 0), "F9");
        d.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_F10, 0), "F10");
        d.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_F11, 0), "F11");
        d.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_F12, 0), "F12");
        d.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "ESC");

        d.getRootPane().getActionMap().put("F1", new AbstractAction() {

            @Override
            public void actionPerformed(ActionEvent e) {
            }
        });
        d.getRootPane().getActionMap().put("F2", new AbstractAction() {

            @Override
            public void actionPerformed(ActionEvent e) {
                if (tela.toString().equalsIgnoreCase("Usuario")) {
                    new PesqUsuario().setVisible(true);
                } else if (tela.toString().equalsIgnoreCase("Funcionario")) {
                    new PesqFuncionario().setVisible(true);
                } else if (tela.toString().equalsIgnoreCase("Cliente")) {
                    new PesqClientes("Cliente").setVisible(true);
                } else if (tela.toString().equalsIgnoreCase("relRecibos")) {
                    new PesqClientes("relRecibos").setVisible(true);
                } else if (tela.toString().equalsIgnoreCase("IMPRIMERECIBO")) {
                    new PesqClientes("IMPRIMERECIBO").setVisible(true);
                }
            }
        });
        d.getRootPane().getActionMap().put("F3", new AbstractAction() {

            @Override
            public void actionPerformed(ActionEvent e) {
            }
        });
        d.getRootPane().getActionMap().put("F4", new AbstractAction() {

            @Override
            public void actionPerformed(ActionEvent e) {
            }
        });
        d.getRootPane().getActionMap().put("F5", new AbstractAction() {

            @Override
            public void actionPerformed(ActionEvent e) {
//                JOptionPane.showMessageDialog(null, "F5 INDEX");
            }
        });
        d.getRootPane().getActionMap().put("F6", new AbstractAction() {

            @Override
            public void actionPerformed(ActionEvent e) {
//                JOptionPane.showMessageDialog(null, "F6 INDEX");
            }
        });
        d.getRootPane().getActionMap().put("F7", new AbstractAction() {

            @Override
            public void actionPerformed(ActionEvent e) {
//                JOptionPane.showMessageDialog(null, "F7 INDEX");
            }
        });
        d.getRootPane().getActionMap().put("F8", new AbstractAction() {

            @Override
            public void actionPerformed(ActionEvent e) {
//                JOptionPane.showMessageDialog(null, "F8 INDEX");
            }
        });
        d.getRootPane().getActionMap().put("F9", new AbstractAction() {

            @Override
            public void actionPerformed(ActionEvent e) {
//                JOptionPane.showMessageDialog(null, "F9 INDEX");
            }
        });
        d.getRootPane().getActionMap().put("F10", new AbstractAction() {

            @Override
            public void actionPerformed(ActionEvent e) {
//                JOptionPane.showMessageDialog(null, "F10 INDEX");
            }
        });
        d.getRootPane().getActionMap().put("F11", new AbstractAction() {

            @Override
            public void actionPerformed(ActionEvent e) {
//                JOptionPane.showMessageDialog(null, "F11 INDEX");
            }
        });

        d.getRootPane().getActionMap().put("F12", new AbstractAction() {

            @Override
            public void actionPerformed(ActionEvent e) {
                if (tela.toString().equalsIgnoreCase("INDEX")) {
                    ConfigSistema con = ConfigSistemaDao.retornaConfigSistemaPorId(1L);
                    int opcao;
                    Object[] botoes = {"Ativar", "Desativar"};
                    opcao = JOptionPane.showOptionDialog(null, "Ativar tela de Login?",
                            "Login!", JOptionPane.YES_NO_OPTION,
                            JOptionPane.QUESTION_MESSAGE, null, botoes, botoes[0]);
                    if (opcao == JOptionPane.YES_OPTION) {
                        if (con != null) {
                            con.setLogin(true);
                        }
                    } else {
                        con.setLogin(false);
                    }
                    con = con.salvar();
                }
            }
        });
    }

    public static String retornaMesPorExtenso(Integer mes) {
//        Integer mes = new Date().getMonth() + 1;
        mes = mes + 1;
        Integer ano = new Date().getYear();
        if (mes == 1 && new Date().getMonth() + 1 == 12) {
            return "Dezembro de " + (ano + 1900) + " a Janeiro de " + (ano + 1901);
        } else if (mes == 1) {
            return "Dezembro de " + (ano + 1899) + " a Janeiro de " + (ano + 1900);
        } else if (mes == 2) {
            return "Janeiro a Fevereiro de " + (ano + 1900);
        } else if (mes == 3) {
            return "Fevereiro a Março de " + (ano + 1900);
        } else if (mes == 4) {
            return "Março a Abril de " + (ano + 1900);
        } else if (mes == 5) {
            return "Abril a Maio de " + (ano + 1900);
        } else if (mes == 6) {
            return "Maio a Junho de " + (ano + 1900);
        } else if (mes == 7) {
            return "Junho a Julho de " + (ano + 1900);
        } else if (mes == 8) {
            return "Julho a Agosto de " + (ano + 1900);
        } else if (mes == 9) {
            return "Agosto a Setembro de " + (ano + 1900);
        } else if (mes == 10) {
            return "Setembro a Outubro de " + (ano + 1900);
        } else if (mes == 11) {
            return "Outubro a Novembro de " + (ano + 1900);
        } else if (mes == 12) {
            return "Novembro a Dezembro de " + (ano + 1900);
        } else {
            return "";
        }
    }

    public static String valorPorExtenso(String valor) {
        String extenso = ""; //variavel que retornará o valor por extenso
        String tipo = ""; //variavel que definirá o tipo de número ( unitario, dezena, centena)
        String parte1 = ""; //variavel que armazenará temporáriamente o valor que foi analizado
        int cont = valor.length(); //conta quantas números tem o valor
        int i = 0; //variavel de controle do while
        int somar = 1; //variavel que dirá o valor a ser somado à variável "i"
        while (i < cont) {
            somar = 1;
//verifica se o caracter atual é número ou uma "," ou "."
            if (valor.substring(i, i + 1).equals(",") == false && valor.substring(i, i + 1).equals(".") == false) {
//o valor passado tem 3 dígitos, ex: R$ 1,20
                if (cont == 4 && i == 0) {
                    tipo = "unitario";

                } else if (cont == 4 && i == 2) {
                    tipo = "dezena";
                } else if (cont == 4 && i == 3) {
                    tipo = "unitario";
                } //o valor passado tem 4 dígitos, ex: R$ 11,20
                else if (cont == 5 && i == 0) {
                    tipo = "dezena";
                } else if (cont == 5 && i == 1) {
                    tipo = "unitario";
                } else if (cont == 5 && i == 3) {
                    tipo = "dezena";
                } else if (cont == 5 && i == 4) {
                    tipo = "unitario";
                } //o valor passado tem 5 dígitos, ex: R$ 111,20
                else if (cont == 6 && i == 0) {
                    tipo = "centena";
                } else if (cont == 6 && i == 1) {
                    tipo = "dezena";
                } else if (cont == 6 && i == 2) {
                    tipo = "unitario";
                } else if (cont == 6 && i == 4) {
                    tipo = "dezena";
                } else if (cont == 6 && i == 5) {
                    tipo = "unitario";
                } //o valor passado tem 6 dígitos, ex: R$ 1.111,20
                else if (cont == 8 && i == 0) {
                    tipo = "unitario";
                } else if (cont == 8 && i == 2) {
                    tipo = "centena";
                } else if (cont == 8 && i == 3) {
                    tipo = "dezena";
                } else if (cont == 8 && i == 4) {
                    tipo = "unitario";
                } else if (cont == 8 && i == 6) {
                    tipo = "dezena";
                } else if (cont == 8 && i == 7) {
                    tipo = "unitario";
                } //o valor passado tem 7 dígitos, ex: R$ 11.111,20
                else if (cont == 9 && i == 0) {
                    tipo = "dezena";
                } else if (cont == 9 && i == 1) {
                    tipo = "unitario";
                } else if (cont == 9 && i == 3) {
                    tipo = "centena";
                } else if (cont == 9 && i == 4) {
                    tipo = "dezena";
                } else if (cont == 9 && i == 5) {
                    tipo = "unitario";
                } else if (cont == 9 && i == 7) {
                    tipo = "dezena";
                } else if (cont == 9 && i == 8) {
                    tipo = "unitario";
                } //o valor passado tem 8 dígitos, ex: R$ 111.111,20
                else if (cont == 10 && i == 0) {
                    tipo = "centena";
                } else if (cont == 10 && i == 1) {
                    tipo = "dezena";
                } else if (cont == 10 && i == 2) {
                    tipo = "unitario";
                } else if (cont == 10 && i == 4) {
                    tipo = "centena";
                } else if (cont == 10 && i == 5) {
                    tipo = "dezena";
                } else if (cont == 10 && i == 6) {
                    tipo = "unitario";
                } else if (cont == 10 && i == 8) {
                    tipo = "dezena";
                } else if (cont == 10 && i == 9) {
                    tipo = "unitario";
                } // se o tipo analisado for do tipo unitário, define a variável "parte1"
                if (tipo == "unitario") {
                    if (valor.substring(i, i + 1).equals("1")) {
                        parte1 = "Um ";
                    } else if (valor.substring(i, i + 1).equals("2")) {
                        parte1 = "Dois ";
                    } else if (valor.substring(i, i + 1).equals("3")) {
                        parte1 = "Três ";
                    } else if (valor.substring(i, i + 1).equals("4")) {
                        parte1 = "Quatro ";
                    } else if (valor.substring(i, i + 1).equals("5")) {
                        parte1 = "Cinco ";
                    } else if (valor.substring(i, i + 1).equals("6")) {
                        parte1 = "Seis ";
                    } else if (valor.substring(i, i + 1).equals("7")) {
                        parte1 = "Sete ";
                    } else if (valor.substring(i, i + 1).equals("8")) {
                        parte1 = "Oito ";
                    } else if (valor.substring(i, i + 1).equals("9")) {
                        parte1 = "Nove ";
                    } else if (valor.substring(i, i + 1).equals("0")) {
                        parte1 = "";
                    }
                }
// se o tipo analisado for do tipo dezena, define a variável "parte1"
                if (tipo == "dezena") {
                    if (valor.substring(i, i + 1).equals("1")) {
//se o caracter começa com "1" é avaliado tb o caracter seguinte
                        if (valor.substring(i, i + 2).equals("10")) {
                            parte1 = "Dez ";
                        } else if (valor.substring(i, i + 2).equals("11")) {
                            parte1 = "Onze ";
                        } else if (valor.substring(i, i + 2).equals("12")) {
                            parte1 = "Doze ";
                        } else if (valor.substring(i, i + 2).equals("13")) {
                            parte1 = "Treze ";
                        } else if (valor.substring(i, i + 2).equals("14")) {
                            parte1 = "Quatorze ";
                        } else if (valor.substring(i, i + 2).equals("15")) {
                            parte1 = "Quinze ";
                        } else if (valor.substring(i, i + 2).equals("16")) {
                            parte1 = "Dezesseis ";
                        } else if (valor.substring(i, i + 2).equals("17")) {
                            parte1 = "Dezesete ";
                        } else if (valor.substring(i, i + 2).equals("18")) {
                            parte1 = "Dezoito ";
                        } else if (valor.substring(i, i + 2).equals("19")) {
                            parte1 = "Dezenove ";
                        }
                        somar = 2; //como foi analisado duas casas do valor, a variável "i" será acrescentada em 2
                    } //se o caracter não começa com "1", já é definido a variável parte1
                    else if (valor.substring(i, i + 1).equals("2")) {
                        parte1 = "Vinte ";
                    } else if (valor.substring(i, i + 1).equals("3")) {
                        parte1 = "Trinta ";
                    } else if (valor.substring(i, i + 1).equals("4")) {
                        parte1 = "Quarenta ";
                    } else if (valor.substring(i, i + 1).equals("5")) {
                        parte1 = "Cinquenta ";
                    } else if (valor.substring(i, i + 1).equals("6")) {
                        parte1 = "Sessenta ";
                    } else if (valor.substring(i, i + 1).equals("7")) {
                        parte1 = "Setenta ";
                    } else if (valor.substring(i, i + 1).equals("8")) {
                        parte1 = "Oitenta ";
                    } else if (valor.substring(i, i + 1).equals("9")) {
                        parte1 = "Noventa ";
                    } else if (valor.substring(i, i + 1).equals("0")) {
                        parte1 = "";
                    }
                }
// se o tipo analisado for do tipo centena, define a variável "parte1"
                if (tipo == "centena") {
                    if (valor.substring(i, i + 1).equals("1")) {
//se o caracter começa com "1", avalia os proximos dois caracteres, para
//definir se é "Cem" ou "Cento"
                        if (valor.substring(i, i + 3).equals("100")) {
                            parte1 = "Cem ";
                        } else {
                            parte1 = "Cento ";
                        }
                    } else if (valor.substring(i, i + 1).equals("2")) {
                        parte1 = "Duzentos ";
                    } else if (valor.substring(i, i + 1).equals("3")) {
                        parte1 = "Trezentos ";
                    } else if (valor.substring(i, i + 1).equals("4")) {
                        parte1 = "Quatrocentos ";
                    } else if (valor.substring(i, i + 1).equals("5")) {
                        parte1 = "Quinhentos ";
                    } else if (valor.substring(i, i + 1).equals("6")) {
                        parte1 = "Seiscentos ";
                    } else if (valor.substring(i, i + 1).equals("7")) {
                        parte1 = "Setecentos ";
                    } else if (valor.substring(i, i + 1).equals("8")) {
                        parte1 = "Oitocentos ";
                    } else if (valor.substring(i, i + 1).equals("9")) {
                        parte1 = "Novecentos ";
                    } else if (valor.substring(i, i + 1).equals("0")) {
                        parte1 = "";
                    }
                }
//se o caracter é igual a "0" ou "," não é adicionado a palavra "e "
                if (i == 0 || valor.substring(i - 1, i) == ",") {
                    extenso = extenso + parte1;
                } else if (valor.substring(i, i + 1).equals("0") == false) { //se o caracter é igual à "0"
                    if (extenso.equals("")) { //verifica se a variável extenso é nula
                        extenso = extenso + parte1;
                    } else {
                        extenso = extenso + "e " + parte1;
                    }
                }
            } //verifica se o caracter atual é ","
            else if (valor.substring(i, i + 1).equals(",")) {
                if (cont == 4 && Integer.parseInt(valor.substring(i - 1, i)) == 1) {
//se o valor tem 3 dígitos e começa com "1", adiciona a palavra Real
                    extenso = extenso + "Real ";
                } else if (cont > 4 || Integer.parseInt(valor.substring(i - 1, i)) > 1) {
//se o valor tem mais 3 dígitos ou não começa com "1", adiciona a palavra Reais
                    extenso = extenso + "Reais ";
                }


            } //verifica se o caracter atual é "."
            else if (valor.substring(i, i + 1).equals(".")) {
                extenso = extenso + "Mil "; //se sim, acrescenta a palavra "Mil"
            }
            i = i + somar;
        } //verifica se as duas casas decimais é maior que 1
        if (Integer.parseInt(valor.substring(cont - 2, cont)) > 1) {
            extenso = extenso + "Centavos"; //se sim, acrescenta a palavra Centavos
        } else if (Integer.parseInt(valor.substring(cont - 2, cont)) == 1) {
            extenso = extenso + "Centavo"; //se não, acrescenta a palavra Centavo
        }
//        jTextField4.setText(extenso);
        return extenso;
    }

    public static String formataMoeda(BigDecimal valor) {
        Locale BRAZIL = new Locale("pt", "BR");
        DecimalFormatSymbols REAL = new DecimalFormatSymbols(BRAZIL);
        DecimalFormat DINHEIRO_REAL = new DecimalFormat("###,###,##0.00", REAL);
        return DINHEIRO_REAL.format(valor);
    }

    //etodo usado para montar a data de vencimento e periodo até do recibo
    public static Date montaDataVencimentoAndPeriodoAte(Integer diaVencimentoCliente, Integer mesDeVencimentoSelecionado) {
        Integer ano = new Date().getYear() + 1900;
        GregorianCalendar dt2;
        //se for mes de JANEIRO e MES atual == 12(DEZEMBRO)
        if ((mesDeVencimentoSelecionado.intValue() + 1) == 1 && (new Date().getMonth() + 1) == 12) {
            dt2 = new GregorianCalendar((ano + 1), mesDeVencimentoSelecionado, diaVencimentoCliente);//ano-mes-dia
            return dt2.getTime();
        } else {
            dt2 = new GregorianCalendar(ano, mesDeVencimentoSelecionado, diaVencimentoCliente);//ano-mes-dia
            return dt2.getTime();
        }
    }

    public static Date montaPeriodoInicial(Integer diaVencimentoCliente, Integer mesDeVencimentoSelecionado) {
        Integer ano = new Date().getYear() + 1900;
        GregorianCalendar dt2;
        //se for mes de JANEIRO e MES atual == 12(DEZEMBRO)
        if ((mesDeVencimentoSelecionado.intValue() + 1) == 1 && (new Date().getMonth() + 1) == 12) {
            dt2 = new GregorianCalendar(ano, 11, (diaVencimentoCliente + 1));//ano-mes-dia
            return dt2.getTime();
        } else {
            dt2 = new GregorianCalendar(ano, (mesDeVencimentoSelecionado - 1), (diaVencimentoCliente + 1));//ano-mes-dia
            return dt2.getTime();
        }

    }
}